/*
 * $AIST_Release: 0.9.0 $
 * Copyright 2011 Information Technology Research Institute, National
 * Institute of Advanced Industrial Science and Technology
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *    http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import org.scalatest.FunSuite

import parser._
import scala.collection.immutable.PagedSeq
import scala.util.parsing.input.PagedSeqReader

                                
object LexerSuite extends FunSuite {
  val data = List( 
    """
proto "querylog.proto"
queries_per_degree: table sum[lat: int][lon: int] of int;
log_record: QueryLogProto = input;
loc: Location = locationinfo(log_record.ip);
emit queries_per_degree[int(loc.lat)][int(loc.lon)] <- 1;
""")

    test("Lexer test") {
      val lexer = new Lexer

      for (d <- data) {
        var scanner = new lexer.Scanner(d)

        def f(scanner: lexer.Scanner): List[lexer.Token] = scanner.first match {
          case lexer.EOF           => Nil
          case lexer.ErrorToken(s) => fail(s)
          case x                   => x::f(scanner.rest)
        }
        assert(f(scanner) == List()
     }
   }
}
